package fy.uap.operatorImpl;

import java.util.ArrayList;
import java.util.List;

import fy.form.listen.dao.MyOrgManager;
import fy.form.listen.log.LogWriter;
import fy.form.listen.operate.AForm_Save_Operator;
import fy.form.listen.set.OA_UAPAccountContrast;
import fy.uap.bean.ProviderImportFormBean;
import fy.uap.bean.RangeBean;
import fy.uap.dao.ProviderImportFormDao;
import fy.util.MyUtil;

public class ProviderImportFormOperator extends AForm_Save_Operator {

	private ProviderImportFormBean pifb = new ProviderImportFormBean();

	private List<String> type1List = new ArrayList<String>();
	private List<String> type2List = new ArrayList<String>();
	private List<String> type3List = new ArrayList<String>();

	private List<String> typeName1List = new ArrayList<String>();
	private List<String> typeName2List = new ArrayList<String>();
	private List<String> typeName3List = new ArrayList<String>();

	private List<String> companyIDList = new ArrayList<String>();
	private String senderCompany;

	private ApptitudeReader apptitudeReader = new ApptitudeReader();

	// 是否制造部导入 true表示由总办导入，选择了多个制造部
	private boolean sign = false;

	private long memberID;

	public String getFormName() {
		return "供应商导入审批表";
	}

	private boolean setSupplierType() {
		try {
			int size = 0;
			if ((size = type1List.size()) == type2List.size()) {
				if (size == type3List.size()) {
					if (size > 0) {
						for (int i = 0; i < size; i++) {
							String type = type3List.get(i);
							String name = typeName3List.get(i);
							if (type == null || "".equals(type)) {
								type = type2List.get(i);
								name = typeName2List.get(i);
								if (type == null || "".equals(type)) {
									type = type1List.get(i);
									name = typeName1List.get(i);
								}

							}
							System.out.println("~~~~~~~~~~~~~~~"+type+"~~~~~~~~~~~~~~~~~~~"+name);
							
							pifb.addSupplyRange(type);
							pifb.setSupplyRangeMap(type, name);
						}
						return true;
					}
				}
			}
		} finally {
			type1List = null;
			type2List = null;
			type3List = null;

			typeName1List = null;
			typeName2List = null;
			typeName3List = null;
		}
		return false;

	}

	public boolean save() {
		
		
		ProviderMessageManager pmm = new ProviderMessageManager();
		pmm.setMemberID(memberID);
		if (pmm.checkMemberIDIsExists(pifb.getMemberCode())) {

			if (setSupplierType()) {
				if (!sign) {
					if (!setCompany(senderCompany))
						if (companyIDList.indexOf(senderCompany) == -1)
							companyIDList.add(senderCompany);
				}

				pifb.setCompanyIDList(companyIDList);
				// pifb.printFields();

				ProviderImportFormDao pifd = new ProviderImportFormDao();

				pifd.setProviderImportFormBean(pifb);
				pifd.setUapAccountList();

				// pifd.setApptitudeBeans(apptitudeReader.getApptitude());

				if (pifd.save()) {
					if (pifd.getFailRangeList() != null
							|| pifd.getUnchangingRangeList() != null) {
						StringBuilder sb = new StringBuilder()
								.append("《")
								.append(super.formBean.getFlowExport()
										.getFlowTitle())
								.append("》导入UAP存在未导入的项，单据编号：")
								.append(pifb.getNumber()).append("。");

						if (pifd.getFailRangeList() != null
								&& pifd.getFailRangeList().size() > 0) {
							List<RangeBean> list = pifd.getFailRangeList();
							sb.append("\n导入失败项：");
							for (int i = 0, size = list.size(); i < size; i++) {
								sb.append("\n").append(
										OA_UAPAccountContrast
												.getAccountNameByUapID(list
														.get(i).getPk_corp()));
								sb.append("   ")
										.append(pifb.getSupplyRangeName(list
												.get(i).getPk_invclass()))
										.append("；");
							}
						}

						if (pifd.getUnchangingRangeList() != null
								&& pifd.getUnchangingRangeList().size() > 0) {
							List<RangeBean> list = pifd
									.getUnchangingRangeList();
							sb.append("\n未变更状态项：");
							for (int i = 0, size = list.size(); i < size; i++) {
								sb.append("\n").append(
										OA_UAPAccountContrast
												.getAccountNameByUapID(list
														.get(i).getPk_corp()));
								sb.append("   ")
										.append(pifb.getSupplyRangeName(list
												.get(i).getPk_invclass()))
										.append("；");
								;
							}
						}

						pmm.sendMessage(sb.toString());
						LogWriter.writeLog(MyUtil.getRealPath(this.getClass()),
								sb.toString());

					}
					if (!pifd.isWriteAptitudeSuccess()) {
						StringBuilder sb = new StringBuilder()
								.append("《")
								.append(super.formBean.getFlowExport()
										.getFlowTitle())
								.append("》导入供应商资质发生异常，请手工录入。单据编号：")
								.append(pifb.getNumber()).append("。");
						pmm.sendMessage(sb.toString());
						LogWriter.writeLog(MyUtil.getRealPath(this.getClass()),
								sb.toString());
					}

					if (!pifd.isWriteToErpSuccess()) {
						String msg = new StringBuilder()
								.append("《")
								.append(super.formBean.getFlowExport()
										.getFlowTitle())
								.append("》导入ERP发生异常，单据编号：")
								.append(pifb.getNumber())
								.append("。请联系集团采购部相关人员，手工导入。").toString();
						pmm.sendMessage(msg);
						LogWriter.writeLog(MyUtil.getRealPath(this.getClass()),
								msg);

					}
					return true;
				} else {
					String msg = new StringBuilder()
							.append("《")
							.append(super.formBean.getFlowExport()
									.getFlowTitle())
							.append("》导入UAP和ERP失败，单据编号：")
							.append(pifb.getNumber())
							.append("。原因：写入UAP数据库发生异常。请联系集团采购部相关人员，手工导入。")
							.toString();
					pmm.sendMessage(msg);
					LogWriter
							.writeLog(MyUtil.getRealPath(this.getClass()), msg);
				}
			} else {
				String msg = new StringBuilder().append("《")
						.append(super.formBean.getFlowExport().getFlowTitle())
						.append("》导入UAP和ERP失败，单据编号：").append(pifb.getNumber())
						.append("。原因：获取到的需要导入的供货范围为空。请联系集团采购部相关人员，手工导入。")
						.toString();
				pmm.sendMessage(msg);
				LogWriter.writeLog(MyUtil.getRealPath(this.getClass()), msg);
			}
		} else {
			String msg = new StringBuilder().append("《")
					.append(super.formBean.getFlowExport().getFlowTitle())
					.append("》写入UAP和ERP失败，单据编号：").append(pifb.getNumber())
					.append("。原因：填单人员工号为空。").toString();
			pmm.sendMessage(msg);
			LogWriter.writeLog(MyUtil.getRealPath(this.getClass()), msg);
		}
		return false;
	}

	@Override
	protected void parseOtherField_FirstStep(
			com.seeyon.v3x.services.flow.bean.FlowExport flowExport) {
		pifb.setApplicationTime(MyUtil.getNowStr());
		memberID = flowExport.getFlowCreatePerson().getId();
		pifb.setMemberCode(MyOrgManager.getInstance().getMemberByID(memberID)
				.getCode());
	}

	@Override
	protected void parseValueExport(
			com.seeyon.v3x.services.form.bean.ValueExport ve) {
		String name = ve.getDisplayName();
		String value = ve.getValue();

		if ("导入制造部值".equals(name)) {
			sign = true;
			String uapAccount = OA_UAPAccountContrast.getUapAccountID(value);
			if (uapAccount != null && companyIDList.indexOf(uapAccount) == -1) {
			if (!setCompany(uapAccount))
					companyIDList.add(uapAccount);
		}
		} else if ("供货范围分类1值".equals(name)) {
			type1List.add(value);
		} else if ("供货范围分类2值".equals(name)) {
			type2List.add(value);
		} else if ("供货范围分类3值".equals(name)) {
			type3List.add(value);
		} else if ("供货范围分类1".equals(name)) {
			typeName1List.add(value);
		} else if ("供货范围分类2".equals(name)) {
			typeName2List.add(value);
		} else if ("供货范围分类3".equals(name)) {
			typeName3List.add(value);
		} else if ("供应商名称".equals(name)) {
			pifb.setProviderName(MyUtil.replaceXMLString(value));
		} else if ("供应商编码".equals(name)) {
			pifb.setProviderCode(MyUtil.replaceXMLString(value));
		} else if ("新增原因".equals(name)) {
			pifb.setReason(MyUtil.replaceXMLString(value));
		} else if ("同类供应商".equals(name)) {
			pifb.setSimilarSuppliers(MyUtil.replaceXMLString(value));
		} else if ("企业地址".equals(name)) {
			pifb.setAddress(MyUtil.replaceXMLString(value));
		} else if ("联系人".equals(name)) {
			pifb.setLinkman(MyUtil.replaceXMLString(value));
		} else if ("供货周期".equals(name)) {
			pifb.setSupplyCycle(MyUtil.replaceXMLString(value));
		} else if ("结算银行".equals(name)) {
			pifb.setCvenbank(MyUtil.replaceXMLString(value));
		} else if ("发货地址".equals(name)) {
			pifb.setSupplyAddress(MyUtil.replaceXMLString(value));
		} else if ("电话号码".equals(name)) {
			pifb.setTel(MyUtil.replaceXMLString(value));
		} else if ("发票税码".equals(name)) {
			pifb.setCpurbillcode(MyUtil.replaceXMLString(value));
		} else if ("银行账号".equals(name)) {
			pifb.setBankAccount(MyUtil.replaceXMLString(value));
		} else if ("税务登记号".equals(name)) {
			pifb.setTaxRegister(MyUtil.replaceXMLString(value));
		} else if ("传真号码".equals(name)) {
			pifb.setFax(MyUtil.replaceXMLString(value));
		} else if ("物流方式PK".equals(name)) {
			pifb.setCouttype(MyUtil.replaceXMLString(value));
		} else if ("币种PK".equals(name)) {
			pifb.setCmoneytype(MyUtil.replaceXMLString(value));
		} else if ("质量体系".equals(name)) {
			pifb.setQualitySystem(MyUtil.replaceXMLString(value));
		} else if ("邮编".equals(name)) {
			pifb.setPostCode(MyUtil.replaceXMLString(value));
		} else if ("企业类型PK".equals(name)) {
			pifb.setCompanyType(MyUtil.replaceXMLString(value));
		} else if ("付款条件".equals(name)) {
			pifb.setCcuspaycond(MyUtil.replaceXMLString(value));
		} else if ("属性".equals(name)) {
			pifb.setProperty(MyUtil.replaceXMLString(value));
		} else if ("电子邮箱".equals(name)) {
			pifb.setEmail(MyUtil.replaceXMLString(value));
		} else if ("价格条款".equals(name)) {
			pifb.setCcontent(MyUtil.replaceXMLString(value));
		} else if ("处理意见".equals(name)) {//处理意见
			pifb.setOption(MyUtil.replaceXMLString(value)); 
		} else if ("是否在供应商名录内".equals(name)) {
			pifb.setProviderIsExist(value);
		} else if ("单位选择器".equals(name)) {
			senderCompany = OA_UAPAccountContrast.getUapAccountID(value);
		} else if ("新增原因".equals(name)) {
			pifb.setReason(MyUtil.replaceXMLString(value));
		} else if ("单据编号".equals(name)) {
			pifb.setNumber(value);
		} else if ("日期".equals(name)) {
			pifb.setApplicationDate(MyUtil.getDate(value));
		} /*else if ("处理意见值".equals(name)) {
			pifb.setOption(MyUtil.replaceXMLString(value));
		}*/ else if ("开户银行".equals(name)) {
			pifb.setcVenBankMemo(MyUtil.replaceXMLString(value));
		} else if ("银行开户名".equals(name)) {
			pifb.setBankAccountName(MyUtil.replaceXMLString(value));
		} else if ("银行代码".equals(name)) {
			pifb.setBankCode(MyUtil.replaceXMLString(value));
		} else if ("是否福耀关联方".equals(name)) {
			pifb.setCvenfygl(MyUtil.strIsNotNull(value) ? value : "否");
			// } else if ("供应商资质类别".equals(name)) {
			// apptitudeClassList.add(MyUtil.replaceXMLString(value));
			// } else if ("开始时间".equals(name)) {
			// apptitudeStartDateList.add(value);
			// } else if ("到期时间".equals(name)) {
			// apptitudeEndDateList.add(value);
			// } else if ("pk_venapt".equals(name)) {
			// pk_venaptList.add(value);
		} else if ("企业类别".equals(name)) {
			pifb.setQylb(MyUtil.replaceXMLString(value));
		} else if ("注册资金".equals(name)) {
			pifb.setZczj(MyUtil.replaceXMLString(value));
		} else if ("成立时间".equals(name)) {
			pifb.setClsj(MyUtil.replaceXMLString(value));
		} else if ("职工总人数".equals(name)) {
			pifb.setZgrs(MyUtil.replaceXMLString(value));
		} else if ("经营场所".equals(name)) {
			pifb.setJycs(MyUtil.replaceXMLString(value));
		} else if ("法人代表".equals(name)) {
			pifb.setFrdb(MyUtil.replaceXMLString(value));
		} else if ("法人代表身份证".equals(name)) {
			pifb.setFrdbsfz(MyUtil.replaceXMLString(value));
		} else if ("年销售额".equals(name)) {
			pifb.setNxse(MyUtil.replaceXMLString(value));
		}

		else if (OA_UAPAccountContrast.getUapShortNameList().indexOf(name) != -1) {
			if ("1".equals(value)) {
				String uapAccount = OA_UAPAccountContrast
						.getUapAccountIDByUAPShortName(name);
				if (!setCompany(uapAccount)) {
					if (uapAccount != null
							&& companyIDList.indexOf(uapAccount) == -1) {
						companyIDList.add(uapAccount);
					}
				}
			}
		} else {
			apptitudeReader.read(name, value);
		}
	}

	private boolean setCompany(String uapAccount) {
		// 福清万达/巴士/包边/福耀四公司供应商导入共享
		if ("1004".equals(uapAccount) || "1005".equals(uapAccount)) {
			if (companyIDList.indexOf("1004") == -1) {
				companyIDList.add("1004");
			}
			if (companyIDList.indexOf("1005") == -1) {
				companyIDList.add("1005");
			}
			if (companyIDList.indexOf("1024") == -1) {
				companyIDList.add("1024");
			}
			if (companyIDList.indexOf("1025") == -1) {
				companyIDList.add("1025");
			}
			return true;
		} else if ("1013".equals(uapAccount) || "1014".equals(uapAccount)) {
			// 长春轿车/ 巴士公司供应商导入共享
			if (companyIDList.indexOf("1013") == -1) {
				companyIDList.add("1013");
			}
			if (companyIDList.indexOf("1014") == -1) {
				companyIDList.add("1014");
			}
			return true;
		} else if ("1006".equals(uapAccount) || "1026".equals(uapAccount)) {
			// 广州汽车玻璃/广州佛山汽车玻璃导入共享
			if (companyIDList.indexOf("1006") == -1) {
				companyIDList.add("1006");
			}
			if (companyIDList.indexOf("1026") == -1) {
				companyIDList.add("1026");
			}
			return true;
		} else if ("1009".equals(uapAccount) || "1032".equals(uapAccount)) {
			// 湖北/武汉荆门导入共享
			if (companyIDList.indexOf("1032") == -1) {
				companyIDList.add("1032");
			}
			if (companyIDList.indexOf("1009") == -1) {
				companyIDList.add("1009");
			}
			return true;
		}else if ("1012".equals(uapAccount)) {
			// 北京 导入保定
			if (companyIDList.indexOf("1036") == -1) {
				companyIDList.add("1036");
			}
			return true;
		}
		return false;
	}
}
